Ho scherzato con JSON per un po 'di tempo, semplicemente inserendolo come testo e non ha ferito nessuno (che io sappia), ma mi piacerebbe iniziare a fare le cose correttamente. Ho visto così tanti presunti "standard" per il tipo di contenuto JSON: application / json applicazione / x-javascript testo / javascript text / x-javascript text / x-json Ma qual è quella corretta o la migliore? Capisco che ci siano problemi di sicurezza e supporto del browser che variano tra loro. So che esiste una domanda simile, quale tipo MIME se JSON viene restituito da un'API REST ?, ma vorrei una risposta leggermente più mirata.
2020-12-07 21:16:11
1 2 Il prossimo Per il testo JSON: application / json Il tipo di supporto MIME per il testo JSON è application / json. La codifica predefinita è UTF-8. (Fonte: RFC 4627). Per JSONP (JavaScript eseguibile) con callback: applicazione / javascript Ecco alcuni post del blog che sono stati menzionati nei commenti pertinenti: Perché non dovresti usare text / html per JSON Internet Explorer a volte ha problemi con application / json Un elenco piuttosto completo di Mimetypes e per cosa usarli L'elenco ufficiale dei tipi di mime allo IANA dalla risposta di @ gnrfan di seguito | IANA ha registrato il tipo MIME ufficiale per JSON come application / json. Alla domanda sul perché non text / json, Crockford sembra aver detto che JSON non è realmente JavaScript né testo e inoltre IANA era più propenso a distribuire application / * che text / *. Più risorse: Tipi di media Richiesta di commenti 4627 bluesmoon: JSON ha un tipo | Per JSON: Tipo di contenuto: application / json Per JSON-P: Tipo di contenuto: applicazione / javascript | Ovviamente, il tipo di supporto MIME corretto per JSON è application / json, ma è necessario capire quale tipo di dati è previsto nella tua applicazione. Ad esempio, utilizzo Ext GWT e la risposta del server deve essere text / html ma contiene dati JSON. Lato client, listener del modulo Ext GWT uploadForm.getForm (). addListener (new FormListenerAdapter () { @Oltrepassare public void onActionFailed (Form form, int httpStatus, String responseText) { MessageBox.alert ("Errore"); } @Oltrepassare public void onActionComplete (Form form, int httpStatus, String responseText) { MessageBox.alert ("Success"); } }); In caso di utilizzo del tipo di risposta application / json, il browser mi suggerisce di salvare il file. Snippet di codice sorgente lato server utilizzando Spring MVC restituisce nuovo AbstractUrlBasedView () { @SuppressWarnings ("unchecked") @Oltrepassare protected void renderMergedOutputModel (modello mappa, richiesta HttpServletRequest, HttpServletResponse response) genera un'eccezione { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: La risposta è dati generati dinamicamente, in base ai parametri di query passati nell'URL. Esempio: {"Name": "Foo", "Id": 1234, "Rank": 7} Tipo di contenuto: application / json JSON-P: JSON con imbottitura. La risposta è costituita da dati JSON, circondati da una chiamata di funzione. Esempio: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Tipo di contenuto: applicazione / javascript | Se stai usando Ubuntu o Debian e servi file .json tramite Apache, potresti voler servire i file con il tipo di contenuto corretto. Lo faccio principalmente perché voglio utilizzare l'estensione per Firefox JSONView Il modulo di Apache mod_mime aiuterà a farlo facilmente. Tuttavia, con Ubuntu è necessario modificare il file /etc/mime.types e aggiungere la riga applicazione / json json Quindi riavvia Apache: riavvio del servizio sudo apache2 | Se stai chiamando i servizi Web ASP.NET dal lato client, devi usare application / json affinché funzioni. Credo che questo sia lo stesso per i framework jQuery ed Ext. | Il tipo di contenuto corretto per JSON è application / json A MENO CHE non si utilizzi JSONP, noto anche come JSON con riempimento, che in realtà è JavaScript e quindi il tipo di contenuto giusto sarebbe application / javascript. | Non c'è dubbio che application / json sia il miglior tipo MIME per una risposta JSON. Ma ho avuto qualche esperienza in cui ho dovuto usare application / x-javascript a causa di alcuni problemi di compressione. Il mio ambiente di hosting è hosting condiviso con GoDaddy. Non mi consentono di modificare le configurazioni del server. Avevo aggiunto il seguente codice al mio file web.config per la compressione delle risposte.Usando questo, le pagine .aspx sono state compresse con g-zip ma le risposte JSON non lo erano. Ho aggiunto nelle sezioni dei tipi statici e dinamici. Ma questo non comprime affatto le risposte JSON. Successivamente ho rimosso questo tipo appena aggiunto e aggiunto in entrambe le sezioni dei tipi statici e dinamici e modificato il tipo di risposta in .ashx (gestore asincrono) in applicazione / x-javascript E ora ho scoperto che le mie risposte JSON erano compresse con g-zip. Quindi personalmente consiglio di usare applicazione / x-javascript solo se desideri comprimere le tue risposte JSON su un ambiente di hosting condiviso. Perché nell'hosting condiviso, non consentono di modificare IISconfigurazioni. | Solo quando utilizzo application / json come tipo MIME ho quanto segue (a partire da novembre 2011 con le versioni più recenti di Chrome, Firefox con Firebug): Niente più avvisi da Chrome quando il JSON viene caricato dal server. Firebug aggiungerà una scheda alla risposta che mostra i dati JSON formattato. Se il tipo MIME è diverso, verrà visualizzato come "Contenuto della risposta". | Non tutto funziona per il tipo di contenuto application / json. Se stai usando Ext JS form submit per caricare il file, tieni presente che la risposta del server viene analizzata dal browser per creare il documento per